아젠다
- Amazon States Language 란
- 공통 State 필드
- Task
- Choice
- Wait
- Succeed
- Fail
- Parallel
- Map
- Pass
1. Amazon States Language 란
상태 머신을 정의하는 데 사용되는 JSON 기반의 구조화된 언어
2. 공통 State 필드
정의
- Type(필수)
- Task, Choice, Wait 등의 상태를 정의할 때 사용합니다.
- Next
- 현재 상태를 종료하고 다음 상태로 이동합니다.
- End
- Comment
- InputPath
- OutputPath
예시
{
"Comment": "An example of the Amazon States Language using wait states",
"StartAt": "FirstState",
"States": {
"FirstState": {
"Type": "Pass",
"Result": "FirstState",
"Next": "LambdaFunctionState"
},
"LambdaFunctionState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}
3. Task
정의
- 실행되는 단일 작업 단위
- 직접 Lambda 함수를 호출하여 작업을 수행.
- 다음 필드를 사용 가능
- Resource(필수)
- Parameters
- ResultPath
- Retry
- Catch
- TimeoutSeconds
- HeartbeatSeconds
예시
{
"Comment": "An example of the Amazon States Language using a Task state.",
"StartAt": "TaskState",
"States": {
"TaskState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}
4. Choice
정의
- 분기 처리가 가능하며, And나 Or등의 비교 연산자를 이용가능하다
- 다음 필드를 사용할 수 있습니다.
예시
{
"Comment": "An example of the Amazon States Language using a choice state.",
"StartAt": "ChoiceState",
"States": {
"ChoiceState": {
"Type" : "Choice",
"Choices": [
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "FirstMatchState"
},
{
"Variable": "$.foo",
"NumericEquals": 2,
"Next": "SecondMatchState"
}
],
"Default": "DefaultState"
},
"FirstMatchState": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnFirstMatch",
"Next": "ReultState"
},
"SecondMatchState": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnSecondMatch",
"Next": "ReultState"
},
"DefaultState": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:OnSecondMatch",
"Next": "ReultState"
},
"ReultState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}
5. Wait
정의
- 지정한 시간, 대기할 수 있으며 상대 시간과 절대 시간 중 하나를 선택 가능
- 이하의 필드를 이용할 수 있고, 어느 쪽인가를 지정해야 한다
- Seconds
- Timestamp
- SecondsPath
- TimestampPath
예시
{
"Comment": "An example of the Amazon States Language using wait states",
"StartAt": "wait_seconds",
"States": {
"wait_seconds": {
"Type": "Wait",
"Seconds": 10,
"Next": "wait_timestamp"
},
"wait_timestamp": {
"Type": "Wait",
"Timestamp": "2015-09-04T01:59:00Z",
"Next": "wait_timestamp_path"
},
"wait_timestamp_path": {
"Type": "Wait",
"TimestampPath": "$.expirydate",
"Next": "wait_seconds_path"
},
"wait_seconds_path": {
"Type": "Wait",
"SecondsPath": "$.expiryseconds",
"End": true
}
}
}
6. Succeed
정의
- 실행을 정상적으로 중지
- 처리가 종료된 상태가 되기 때문에 End 필드나 Next 필드는 필요 없다
예시
{
"Comment": "An example of the Amazon States Language using Succeed states",
"StartAt": "Process1",
"States": {
"Process1": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process1",
"Next": "ChoiceStep"
},
"ChoiceStep": {
"Type": "Choice",
"Choices": [{
"Variable": "$.processResult",
"StringEquals": "SuccessProcess",
"Next": "SuccessProcess"
}, {
"Variable": "$.processResult",
"StringEquals": "Process2",
"Next": "Process2"
}]
},
"SuccessProcess": {
"Type": "Succeed"
},
"Process2": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
"Catch": [{
"ErrorEquals": [
"HandledError"
],
"Next": "FailedProcess"
}],
"Next": "Process3"
},
"FailedProcess": {
"Type": "Fail"
},
"Process3": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process3",
"End": true
}
}
}
7. Fail
정의
- 오류로 인해 실행을 중지
- 처리가 종료된 상태가 되기 때문에 End 필드나 Next 필드는 필요 없다
- 다음 필드를 사용할 수 있습니다.
예시
{
"Comment": "An example of the Amazon States Language using Succeed states",
"StartAt": "Process1",
"States": {
"Process1": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process1",
"Next": "ChoiceStep"
},
"ChoiceStep": {
"Type": "Choice",
"Choices": [{
"Variable": "$.processResult",
"StringEquals": "SuccessProcess",
"Next": "SuccessProcess"
}, {
"Variable": "$.processResult",
"StringEquals": "Process2",
"Next": "Process2"
}]
},
"SuccessProcess": {
"Type": "Succeed"
},
"Process2": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process2",
"Catch": [{
"ErrorEquals": [
"HandledError"
],
"Next": "FailedProcess"
}],
"Next": "Process3"
},
"FailedProcess": {
"Type": "Fail"
},
"Process3": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:Process3",
"End": true
}
}
}
8. Parallel
정의
- 병렬 처리가 가능
- 다음 필드를 사용할 수 있습니다.
- Branches (필수)
- ResultPath
- Retry
- Catch
예시
{
"Comment": "An example of the Amazon States Language using a parallel state to execute two branches at the same time.",
"StartAt": "Parallel",
"States": {
"Parallel": {
"Type": "Parallel",
"Next": "Final State",
"Branches": [
{
"StartAt": "Wait 10s",
"States": {
"Wait 10s": {
"Type": "Wait",
"Seconds": 10,
"End": true
}
}
},
{
"StartAt": "Pass State",
"States": {
"Pass State": {
"Type": "Pass",
"Next": "Wait 5s"
},
"Wait 5s": {
"Type": "Wait",
"Seconds": 5,
"End": true
}
}
}
]
},
"Final State": {
"Type": "Pass",
"End": true
}
}
}
9. Map
정의
- 동적 병렬 처리가 가능
- 입력 배열의 각 요소에 대해 동일한 단계로 실행 가능
- 다음 필드를 사용할 수 있습니다.
- Iterator (필수)
- ItemsPath
- MaxConcurrency
- ResultPath
- Retry
- Catch
예시
{
"Comment": "An example of the Amazon States Language using Map states",
"StartAt": "MapState",
"States": {
"MapState": {
"Type": "Map",
"End": true,
"Iterator": {
"StartAt": "Customer",
"States": {
"Customer": {
"Type": "Parallel",
"End": true,
"Branches": [
{
"StartAt": "CustomerA",
"States": {
"CustomerA": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:CustomerA",
"End": true
}
}
},
{
"StartAt": "CustomerB",
"States": {
"CustomerB": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:CustomerB",
"End": true
}
}
}
]
}
}
}
}
}
}
10. Pass
정의
- 워크플로를 구축, 디버깅할 때 사용
- 입력을 처리하지 않고 출력에 전달
- 다음 필드를 사용할 수 있습니다.
- Result
- ResultPath
- Parameters
예시
{
"Comment": "An example of the Amazon States Language using a pass state.",
"StartAt": "ChoiceState",
"States": {
"ChoiceState": {
"Type" : "Choice",
"Choices": [
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "TaskState"
},
{
"Variable": "$.foo",
"NumericEquals": 2,
"Next": "PassState"
}
]
},
"TaskState": {
"Type" : "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"Next": "ReultState"
},
"PassState": {
"Type" : "Pass",
"Result": "just pass",
"Next": "ReultState"
},
"ReultState": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
"End": true
}
}
}